package ihm;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.UnknownHostException;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import client.CommunicationClient;

/**
 * Classe PannDemande
 *
 */
public class PannDemande extends JPanel
{
	CommunicationClient comCl;
	private static final long serialVersionUID = 1L;
	private String mail,demande; 
	private JLabel Demande;
	private JTextField DemandeTexte;
	private JButton Envoyer_Demande;
	private int adrExiste2=2;
	private int dejaAm=2;
	private int demExiste=2;
	private int pasDejaDem=2;
	
	/** Constructeur **/
	public PannDemande(CommunicationClient _comCl)
	{
		comCl=_comCl;
		setBackground(Color.gray);
		demande(comCl.getEmail(), comCl.getAmis());
		while((recupererDemandes(comCl.getEmail()))==1)
		{}
	}//fin PannDemande()
	
	/** Methode : affiche le panneau pour les demandes **/
	public void demande(String _mail,ArrayList<String> _amis)
	{
		mail=_mail;

		Demande = new JLabel("Demande d'ami : ");add(Demande);
		DemandeTexte = new JTextField("Entrez l'email de la personne", 20);add(DemandeTexte);
		Envoyer_Demande=new JButton("Envoyer Demande");add(Envoyer_Demande);		
		Envoyer_Demande.addActionListener(new ActionListener() 
		{			
		

			@Override
			public void actionPerformed(ActionEvent arg0) 
			{
				demande=DemandeTexte.getText();
				try {
					comCl=new CommunicationClient(null, null, mail, demande, 4);
				} catch (UnknownHostException e) {e.printStackTrace();}
				catch (IOException e) {e.printStackTrace();}
				comCl.getComE().setmDp(demande);
				comCl.getComE().setEmail(mail);
				comCl.getComE().setAction(4);
				comCl.start();
				while((adrExiste2=comCl.getExiste())==2 || (dejaAm=comCl.getDejaAmi())==2 || (pasDejaDem=comCl.getPasEncoreDemande())==2)//=2 par défaut et devient 1 ou 0 selon l'existence de l'email 
				{}										// et selon s'il sont deja amis ou pas
				if (adrExiste2==1)//l'adresse existe!
				{
					if(dejaAm==1)// et ils ne sont pas amis!
					 {
						if (pasDejaDem==1)// et il n'a pas encore fait la demande
						{
							if(JOptionPane.showConfirmDialog(null, "Etes vous sur ?", "Message de" +
						 		" confirmation", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION)//si oui
							{JOptionPane.showMessageDialog(null, "Votre demande a ete envoyee !", "Message " +
	                         		"d’information", JOptionPane.INFORMATION_MESSAGE);}
						}
						else // il l'a deja demande en ami
						{JOptionPane.showMessageDialog(null, "Vous avez deja demande cette personne en ami !","Message " +
	                    		"d’avertissement", JOptionPane.ERROR_MESSAGE);}
					 }
					else //deja amis!
					{JOptionPane.showMessageDialog(null, "Vous etes deja ami avec cette personne !","Message " +
	                    		"d’avertissement", JOptionPane.ERROR_MESSAGE);}						
				}
				else //l'adresse n'existe pas
				{JOptionPane.showMessageDialog(null, "Cet email n'existe pas !","Message " +
                    		"d’avertissement", JOptionPane.ERROR_MESSAGE);}
				dejaAm=2;pasDejaDem=2;adrExiste2=2;
			}
		});
	}//fin Demande()
	
	
	/** Methode : recupere les demandes **/
	public int recupererDemandes(String _mail)
	{
		mail=_mail;
		try {
			comCl = new CommunicationClient(null,null,mail,null,5);
		} catch (UnknownHostException e) {e.printStackTrace();
		} catch (IOException e) {e.printStackTrace();}				
		comCl.getComE().setEmail(mail);
		comCl.getComE().setAction(5);
		comCl.start();
		while((demExiste=comCl.getExiste2())==2) 
		{}										
		
		if(demExiste==1) 
		{	
			afficherDemande(_mail);
		}
		
		return demExiste;
	}//fin recupererDemandes()
	
	
	/** Methode qui affiche la demande**/
	public void afficherDemande(String _mail)
	{
		mail=_mail;
		try {
			comCl = new CommunicationClient(null,null,mail,null,6);
		} catch (UnknownHostException e) {e.printStackTrace();
		} catch (IOException e) {e.printStackTrace();}				
		comCl.getComE().setEmail(mail);
		comCl.getComE().setAction(6);
		comCl.start();
		String demandeur;
		while(comCl.getDemandeurFini()==false)
		{
		}
		demandeur=comCl.getDemandeur();
		if(JOptionPane.showConfirmDialog(null, "'"+demandeur+"' vous demande en ami(e), acceptez-vous de devenir son ami(e)?" +
				" \n(Attention, fermer la fenetre est considere comme un NON !)", "Demande d'" +
		 		" ami(e)", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION)
		{
			accepterDemande(demandeur, _mail);
		}
		supprimerDemande(demandeur,_mail);	
	}//fin afficherDemande()
	
	/**Methode : accepte demande**/
	public void accepterDemande(String _demandeur, String _mail)
	{
		try {
			comCl = new CommunicationClient(null,null,_mail,_demandeur,7);
		} catch (UnknownHostException e) {e.printStackTrace();
		} catch (IOException e) {e.printStackTrace();}		
		comCl.getComE().setEmail(_mail);
		comCl.getComE().setmDp(_demandeur);
		comCl.getComE().setAction(7);
	}
	
	/**Methode : supprimer demande de la BDD**/
	public void supprimerDemande(String _demandeur, String _mail)
	{
		try {
			comCl = new CommunicationClient(null,null,_mail,_demandeur,8);
		} catch (UnknownHostException e) {e.printStackTrace();
		} catch (IOException e) {e.printStackTrace();}		
		comCl.getComE().setEmail(_mail);
		comCl.getComE().setmDp(_demandeur);
		comCl.getComE().setAction(8);
	}
	
	/** Methode qui reaffiche le panneau**/
	public void reafficheListeAmis()
	{
		repaint();
	}
	
	/** Methodes get & set**/
	public void setAdrExiste2(int a)
	{
		adrExiste2=a;
	}

}//fin Classe PannDemande
